{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# BigQuery Tutorial"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## BigQuery Preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "_cell_guid": "79c7e3d0-c299-4dcb-8224-4455121ee9b0",
    "_uuid": "d629ff2d2480ee46fbb7e2d37f6b5fab8052498a"
   },
   "outputs": [],
   "source": [
    "from google.cloud import bigquery\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "# Adding project ID from Google Cloud Platform\n",
    "PROJECT_ID = 'tdsbigquery'\n",
    "client = bigquery.Client(project=PROJECT_ID, location=\"US\")\n",
    "dataset = client.create_dataset('tds_tutorial', exists_ok=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>location</th>\n",
       "      <th>city</th>\n",
       "      <th>country</th>\n",
       "      <th>pollutant</th>\n",
       "      <th>value</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>unit</th>\n",
       "      <th>source_name</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>averaged_over_in_hours</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>BTM Layout, Bengaluru - KSPCB</td>\n",
       "      <td>Bengaluru</td>\n",
       "      <td>IN</td>\n",
       "      <td>co</td>\n",
       "      <td>910.00</td>\n",
       "      <td>2018-02-22 03:00:00+00:00</td>\n",
       "      <td>µg/m³</td>\n",
       "      <td>CPCB</td>\n",
       "      <td>12.912811</td>\n",
       "      <td>77.60922</td>\n",
       "      <td>0.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>BTM Layout, Bengaluru - KSPCB</td>\n",
       "      <td>Bengaluru</td>\n",
       "      <td>IN</td>\n",
       "      <td>no2</td>\n",
       "      <td>131.87</td>\n",
       "      <td>2018-02-22 03:00:00+00:00</td>\n",
       "      <td>µg/m³</td>\n",
       "      <td>CPCB</td>\n",
       "      <td>12.912811</td>\n",
       "      <td>77.60922</td>\n",
       "      <td>0.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>BTM Layout, Bengaluru - KSPCB</td>\n",
       "      <td>Bengaluru</td>\n",
       "      <td>IN</td>\n",
       "      <td>o3</td>\n",
       "      <td>15.57</td>\n",
       "      <td>2018-02-22 03:00:00+00:00</td>\n",
       "      <td>µg/m³</td>\n",
       "      <td>CPCB</td>\n",
       "      <td>12.912811</td>\n",
       "      <td>77.60922</td>\n",
       "      <td>0.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>BTM Layout, Bengaluru - KSPCB</td>\n",
       "      <td>Bengaluru</td>\n",
       "      <td>IN</td>\n",
       "      <td>pm25</td>\n",
       "      <td>45.62</td>\n",
       "      <td>2018-02-22 03:00:00+00:00</td>\n",
       "      <td>µg/m³</td>\n",
       "      <td>CPCB</td>\n",
       "      <td>12.912811</td>\n",
       "      <td>77.60922</td>\n",
       "      <td>0.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>BTM Layout, Bengaluru - KSPCB</td>\n",
       "      <td>Bengaluru</td>\n",
       "      <td>IN</td>\n",
       "      <td>so2</td>\n",
       "      <td>4.49</td>\n",
       "      <td>2018-02-22 03:00:00+00:00</td>\n",
       "      <td>µg/m³</td>\n",
       "      <td>CPCB</td>\n",
       "      <td>12.912811</td>\n",
       "      <td>77.60922</td>\n",
       "      <td>0.25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                        location       city country pollutant   value  \\\n",
       "0  BTM Layout, Bengaluru - KSPCB  Bengaluru      IN        co  910.00   \n",
       "1  BTM Layout, Bengaluru - KSPCB  Bengaluru      IN       no2  131.87   \n",
       "2  BTM Layout, Bengaluru - KSPCB  Bengaluru      IN        o3   15.57   \n",
       "3  BTM Layout, Bengaluru - KSPCB  Bengaluru      IN      pm25   45.62   \n",
       "4  BTM Layout, Bengaluru - KSPCB  Bengaluru      IN       so2    4.49   \n",
       "\n",
       "                  timestamp   unit source_name   latitude  longitude  \\\n",
       "0 2018-02-22 03:00:00+00:00  µg/m³        CPCB  12.912811   77.60922   \n",
       "1 2018-02-22 03:00:00+00:00  µg/m³        CPCB  12.912811   77.60922   \n",
       "2 2018-02-22 03:00:00+00:00  µg/m³        CPCB  12.912811   77.60922   \n",
       "3 2018-02-22 03:00:00+00:00  µg/m³        CPCB  12.912811   77.60922   \n",
       "4 2018-02-22 03:00:00+00:00  µg/m³        CPCB  12.912811   77.60922   \n",
       "\n",
       "   averaged_over_in_hours  \n",
       "0                    0.25  \n",
       "1                    0.25  \n",
       "2                    0.25  \n",
       "3                    0.25  \n",
       "4                    0.25  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Creating a reference of our table\n",
    "table = client.get_table(\"bigquery-public-data.openaq.global_air_quality\")\n",
    "\n",
    "# Looking at the first five rows from our dataset\n",
    "client.list_rows(table, max_results=5).to_dataframe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>country</th>\n",
       "      <th>number_of_locations</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CN</td>\n",
       "      <td>6402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>US</td>\n",
       "      <td>3597</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ES</td>\n",
       "      <td>2089</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>FR</td>\n",
       "      <td>1593</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>DE</td>\n",
       "      <td>1441</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>IN</td>\n",
       "      <td>1282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>PL</td>\n",
       "      <td>836</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>AT</td>\n",
       "      <td>782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>TR</td>\n",
       "      <td>495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>TW</td>\n",
       "      <td>459</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  country  number_of_locations\n",
       "0      CN                 6402\n",
       "1      US                 3597\n",
       "2      ES                 2089\n",
       "3      FR                 1593\n",
       "4      DE                 1441\n",
       "5      IN                 1282\n",
       "6      PL                  836\n",
       "7      AT                  782\n",
       "8      TR                  495\n",
       "9      TW                  459"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Checking the number of measure station in each country\n",
    "query = \"\"\"SELECT country, COUNT(location) AS number_of_locations\n",
    "                FROM `bigquery-public-data.openaq.global_air_quality`\n",
    "                GROUP BY country\n",
    "                ORDER by number_of_locations DESC\"\"\"\n",
    "\n",
    "query_job = client.query(query)\n",
    "query_job.to_dataframe().head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>value</th>\n",
       "      <th>averaged_over_in_hours</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>21236.000000</td>\n",
       "      <td>19951.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>114.253887</td>\n",
       "      <td>1.645882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>6171.898244</td>\n",
       "      <td>4.073241</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-335582.000000</td>\n",
       "      <td>0.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.300000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>13.100000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>44.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>825736.000000</td>\n",
       "      <td>59.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               value  averaged_over_in_hours\n",
       "count   21236.000000            19951.000000\n",
       "mean      114.253887                1.645882\n",
       "std      6171.898244                4.073241\n",
       "min   -335582.000000                0.250000\n",
       "25%         2.300000                1.000000\n",
       "50%        13.100000                1.000000\n",
       "75%        44.000000                1.000000\n",
       "max    825736.000000               59.000000"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Statistics Summary\n",
    "query = \"\"\"SELECT value,averaged_over_in_hours\n",
    "            FROM `bigquery-public-data.openaq.global_air_quality`\n",
    "            WHERE unit = 'µg/m³'\n",
    "            \"\"\"\n",
    "query_job = client.query(query)\n",
    "query_job.to_dataframe().describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>country</th>\n",
       "      <th>avg_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DE</td>\n",
       "      <td>1.442474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ES</td>\n",
       "      <td>1.455877</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>IE</td>\n",
       "      <td>6.701818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>BE</td>\n",
       "      <td>8.860000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>PE</td>\n",
       "      <td>17.657000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  country  avg_value\n",
       "0      DE   1.442474\n",
       "1      ES   1.455877\n",
       "2      IE   6.701818\n",
       "3      BE   8.860000\n",
       "4      PE  17.657000"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculating the average value of of Ozone Gas in each different country\n",
    "query = \"\"\"\n",
    "    SELECT\n",
    "        country, \n",
    "        avg(value) as avg_value\n",
    "    FROM\n",
    "      `bigquery-public-data.openaq.global_air_quality`\n",
    "    WHERE\n",
    "      pollutant = 'o3'\n",
    "      AND country != 'NL'\n",
    "      AND country != 'DK'\n",
    "      AND country != 'LT'\n",
    "      AND country != 'LU'\n",
    "      AND unit = 'µg/m³'\n",
    "    GROUP BY country\n",
    "    ORDER BY avg_value ASC\n",
    "        \"\"\"\n",
    "\n",
    "query_job = client.query(query)\n",
    "query_df = query_job.to_dataframe()\n",
    "query_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplots(figsize=(12,7))\n",
    "y_pos = np.arange(len(query_df.country))\n",
    "plt.bar(y_pos, query_df.avg_value, align='center', alpha=0.7)\n",
    "plt.xticks(y_pos, query_df.country.values)\n",
    "\n",
    "plt.ylabel('NO2 values in µg/m³', fontsize=16)\n",
    "plt.xticks(rotation= 60,fontsize=16)\n",
    "plt.xlabel('Country', fontsize=16)\n",
    "plt.title('Ozone gas Average in different countries', fontsize=20)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## BigQuery ML"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from google.cloud.bigquery import magics\n",
    "from kaggle.gcp import KaggleKernelCredentials\n",
    "magics.context.credentials = KaggleKernelCredentials()\n",
    "magics.context.project = PROJECT_ID\n",
    "%load_ext google.cloud.bigquery"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: []\n",
       "Index: []"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "CREATE MODEL IF NOT EXISTS `tds_tutorial.Model`\n",
    "OPTIONS(model_type='logistic_reg') AS\n",
    "SELECT\n",
    "  country AS label, latitude, longitude, value \n",
    "FROM\n",
    "  `bigquery-public-data.openaq.global_air_quality`\n",
    "LIMIT 800;"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>training_run</th>\n",
       "      <th>iteration</th>\n",
       "      <th>loss</th>\n",
       "      <th>eval_loss</th>\n",
       "      <th>learning_rate</th>\n",
       "      <th>duration_ms</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.620431</td>\n",
       "      <td>0.620283</td>\n",
       "      <td>0.2</td>\n",
       "      <td>15349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.503955</td>\n",
       "      <td>0.503675</td>\n",
       "      <td>0.4</td>\n",
       "      <td>6337</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.350776</td>\n",
       "      <td>0.350753</td>\n",
       "      <td>0.8</td>\n",
       "      <td>4062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.201201</td>\n",
       "      <td>0.201948</td>\n",
       "      <td>1.6</td>\n",
       "      <td>5798</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>0.099076</td>\n",
       "      <td>0.100353</td>\n",
       "      <td>3.2</td>\n",
       "      <td>17729</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>0.046695</td>\n",
       "      <td>0.047973</td>\n",
       "      <td>6.4</td>\n",
       "      <td>7678</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0.022370</td>\n",
       "      <td>0.023383</td>\n",
       "      <td>12.8</td>\n",
       "      <td>3873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>0.010939</td>\n",
       "      <td>0.011649</td>\n",
       "      <td>25.6</td>\n",
       "      <td>3995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>0.005421</td>\n",
       "      <td>0.005881</td>\n",
       "      <td>51.2</td>\n",
       "      <td>6840</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.002706</td>\n",
       "      <td>0.002989</td>\n",
       "      <td>102.4</td>\n",
       "      <td>4302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>0.001356</td>\n",
       "      <td>0.001524</td>\n",
       "      <td>204.8</td>\n",
       "      <td>8121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>0.000681</td>\n",
       "      <td>0.000778</td>\n",
       "      <td>409.6</td>\n",
       "      <td>4383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>0.000342</td>\n",
       "      <td>0.000398</td>\n",
       "      <td>819.2</td>\n",
       "      <td>4025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "      <td>0.000172</td>\n",
       "      <td>0.000203</td>\n",
       "      <td>1638.4</td>\n",
       "      <td>2999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "      <td>0.000086</td>\n",
       "      <td>0.000104</td>\n",
       "      <td>3276.8</td>\n",
       "      <td>5228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0</td>\n",
       "      <td>15</td>\n",
       "      <td>0.000043</td>\n",
       "      <td>0.000053</td>\n",
       "      <td>6553.6</td>\n",
       "      <td>8068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0</td>\n",
       "      <td>16</td>\n",
       "      <td>0.000022</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>13107.2</td>\n",
       "      <td>3993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0</td>\n",
       "      <td>17</td>\n",
       "      <td>0.000011</td>\n",
       "      <td>0.000014</td>\n",
       "      <td>26214.4</td>\n",
       "      <td>4262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0</td>\n",
       "      <td>18</td>\n",
       "      <td>0.000006</td>\n",
       "      <td>0.000007</td>\n",
       "      <td>52428.8</td>\n",
       "      <td>6043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0</td>\n",
       "      <td>19</td>\n",
       "      <td>0.000003</td>\n",
       "      <td>0.000004</td>\n",
       "      <td>104857.6</td>\n",
       "      <td>5709</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    training_run  iteration      loss  eval_loss  learning_rate  duration_ms\n",
       "0              0          0  0.620431   0.620283            0.2        15349\n",
       "1              0          1  0.503955   0.503675            0.4         6337\n",
       "2              0          2  0.350776   0.350753            0.8         4062\n",
       "3              0          3  0.201201   0.201948            1.6         5798\n",
       "4              0          4  0.099076   0.100353            3.2        17729\n",
       "5              0          5  0.046695   0.047973            6.4         7678\n",
       "6              0          6  0.022370   0.023383           12.8         3873\n",
       "7              0          7  0.010939   0.011649           25.6         3995\n",
       "8              0          8  0.005421   0.005881           51.2         6840\n",
       "9              0          9  0.002706   0.002989          102.4         4302\n",
       "10             0         10  0.001356   0.001524          204.8         8121\n",
       "11             0         11  0.000681   0.000778          409.6         4383\n",
       "12             0         12  0.000342   0.000398          819.2         4025\n",
       "13             0         13  0.000172   0.000203         1638.4         2999\n",
       "14             0         14  0.000086   0.000104         3276.8         5228\n",
       "15             0         15  0.000043   0.000053         6553.6         8068\n",
       "16             0         16  0.000022   0.000027        13107.2         3993\n",
       "17             0         17  0.000011   0.000014        26214.4         4262\n",
       "18             0         18  0.000006   0.000007        52428.8         6043\n",
       "19             0         19  0.000003   0.000004       104857.6         5709"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "SELECT\n",
    "  *\n",
    "FROM\n",
    "  ML.TRAINING_INFO(MODEL `tds_tutorial.Model`)\n",
    "ORDER BY iteration "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>precision</th>\n",
       "      <th>recall</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>f1_score</th>\n",
       "      <th>log_loss</th>\n",
       "      <th>roc_auc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000003</td>\n",
       "      <td>1.002001</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   precision  recall  accuracy  f1_score  log_loss   roc_auc\n",
       "0        1.0     1.0       1.0       1.0  0.000003  1.002001"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "SELECT\n",
    "  *\n",
    "FROM ML.EVALUATE(MODEL `tds_tutorial.Model`, (\n",
    "SELECT\n",
    "  country AS label, latitude, longitude, value \n",
    "FROM\n",
    "  `bigquery-public-data.openaq.global_air_quality`\n",
    "LIMIT 800))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
